#include "AutoAdminModule.h"

// Autoadministrable
extern QSqlDatabase enjoylifedb;
extern AutoAdminSqlTableModel *cAutoAdmin_model;
extern QTableView *cAutoAdmin_view;
// Cliente
CAutoAdminSqlTableModel *clientsaa_model;
QTableView *clientsaa_view;
// Shorcuts
// Definición de acceso directo para agregar un registro mediante la combinacion de teclas "Ctrl + A".
QShortcut* shortcutAlta2;
// Definición de acceso directo para borrar un registro mediante la tecla "Supr".
QShortcut* shortcutBaja2;
// Definición de acceso directo para modificar un registro mediante la combinacion de teclas "Ctrl + M".
QShortcut* shortcutModif2;
// Definición de acceso directo para guardar un registro mediante la combinacion de teclas "Ctrl + G".
QShortcut* shortcutGuardar2;

/**
 * @brief AutoAdminModule::AutoAdminModule
 * @param parent
 */
AutoAdminModule::AutoAdminModule(QWidget *parent) :
    QMainWindow(parent)
{
    autoAdmin_toolbar = new CustomModulesToolbar();
//    ManageDomainsToolBar();
    UpdateListsToolBar();
    addToolBar(autoAdmin_toolbar);

    // Módelo de autoadministrable
    cAutoAdmin_model = new AutoAdminSqlTableModel(this,enjoylifedb);
    cAutoAdmin_model->setTable("autoadministrable");
    cAutoAdmin_model->setEditStrategy(AutoAdminSqlTableModel::OnFieldChange);
    // Módelo de cliente
    clientsaa_model = new CAutoAdminSqlTableModel(this,enjoylifedb);
    clientsaa_model->setTable("cliente");
    clientsaa_model->setEditStrategy(CAutoAdminSqlTableModel::OnFieldChange);

    QWidget* widget_main = new QWidget();
    QWidget* widget_centro = new QWidget();
    QWidget* widget_derecho = new QWidget();
    QWidget *widgetAutoAdmins = new QWidget();

    QGridLayout *grid_main = new QGridLayout();
    QGridLayout *grid_centro = new QGridLayout();
    QGridLayout *grid_derecho = new QGridLayout();
    QGridLayout *grid_abm = new QGridLayout();
//    QGridLayout *grid_prinSec = new QGridLayout();
//    QGridLayout *grid_fechas = new QGridLayout();

    QGroupBox *group_filtro = new QGroupBox("Filtros y Búsquedas",this);
    QGroupBox *group_abm = new QGroupBox("Alta - Baja - Modificación",this);
    QGroupBox *group_seccion = new QGroupBox("Sección",this);
    QGroupBox *group_link = new QGroupBox("Link",this);
    QGroupBox *group_usuario = new QGroupBox("Usuario",this);
    QGroupBox *group_contrasenia = new QGroupBox("Contraseña",this);
//    QGroupBox *group_fechas = new QGroupBox("Fecha Alta - Fecha Vencimiento",this);

    QFormLayout *form_filtro = new QFormLayout;
    QFormLayout *form_alta = new QFormLayout;
    QFormLayout *form_baja = new QFormLayout;
    QFormLayout *form_modificar = new QFormLayout;
    QFormLayout *form_guardar = new QFormLayout;
    QFormLayout *form_seccion = new QFormLayout;
    QFormLayout *form_link = new QFormLayout;
    QFormLayout *form_usuario = new QFormLayout;
    QFormLayout *form_contrasenia = new QFormLayout;

    // Vista de cliente
    clientsaa_view = new QTableView(this);
    clientsaa_view->setModel(clientsaa_model);
    // Vista de autoadministrable
    cAutoAdmin_view = new QTableView(widgetAutoAdmins);
    cAutoAdmin_view->setModel(cAutoAdmin_model);

    // Filtro
    QLabel *label_filtro = new QLabel("Búsqueda Rápida por...",0);
//    label_filtro->setFixedWidth(300);
    label_filtro->setFixedHeight(20);
    label_filtro->setAlignment(Qt::AlignCenter);
    label_filtro->setStyleSheet("background-color: rgb(13, 200, 35); font: 11pt \"Helvetica57-Condensed\";border-style: solid");
    form_filtro->addRow(label_filtro);
    //
    find_razon_social = new QRadioButton("Razón Social",0);
    form_filtro->addRow(find_razon_social);
    connect(find_razon_social,SIGNAL(clicked()),this,SLOT(FindRazonSocial()));
    find_seccion = new QRadioButton("Sección",0);
    form_filtro->addRow(find_seccion);
    connect(find_seccion,SIGNAL(clicked()),this,SLOT(FindAutoadmin()));
    //
    find_line = new QLineEdit(this);
    find_line->setEnabled(false);
    form_filtro->addRow(find_line);
    //
    QPixmap SITIimage("://Images/SITI-Soft_Logo.png");
//    image.scaled(25,75);
    QLabel *SITILabel = new QLabel("",0);
    SITILabel->setPixmap(SITIimage);
//    imageLabel->setScaledContents(true);
//    imageLabel->setAutoFillBackground(true);
    SITILabel->setFixedHeight(225);
//    imageLabel->setFixedWidth(300);
    SITILabel->setAlignment(Qt::AlignCenter);
//    form_filtro->addRow(imageLabel);
    group_filtro->setLayout(form_filtro);
//    group_filtro->setFixedWidth(320);

    // Botones
    altaBtn = new QPushButton(QIcon(""),"Alta");
    form_alta->addRow(altaBtn);
    connect(altaBtn,SIGNAL(clicked()),this,SLOT(AltaBtn()));
    bajaBtn = new QPushButton(QIcon("://Icons/ABMs/abmBaja48.png"),"");
    form_baja->addRow(bajaBtn);
    connect(bajaBtn,SIGNAL(clicked()),this,SLOT(BajaBtn()));
    modificarBtn = new QPushButton(QIcon("://Icons/ABMs/abmModif48.png"),"");
    form_modificar->addRow(modificarBtn);
    connect(modificarBtn,SIGNAL(clicked()),this,SLOT(ModificarBtn()));
    guardarBtn = new QPushButton(QIcon("://Icons/ABMs/guardar48.png"),"");
    form_guardar->addRow(guardarBtn);
    connect(guardarBtn,SIGNAL(clicked()),this,SLOT(GuardarBtn()));
    //
    grid_abm->addLayout(form_alta,0,0);
    grid_abm->addLayout(form_baja,0,1);
    grid_abm->addLayout(form_modificar,0,2);
    grid_abm->addLayout(form_guardar,0,3);
    group_abm->setLayout(grid_abm);

    // Datos
    // Sección
    line_seccion = new QLineEdit;
    line_seccion->setFixedSize(600,30);
    line_seccion->setAlignment(Qt::AlignCenter);
    line_seccion->setStyleSheet("background-color: rgb(0, 139, 56); color: rgb(255, 255, 255); font: 15pt \"Helvetica57-Condensed\";border-style: solid");
    form_seccion->addRow(line_seccion);
    // Link
    line_link = new QLineEdit;
    line_link->setFixedSize(600,30);
    line_link->setAlignment(Qt::AlignCenter);
    line_link->setStyleSheet("background-color: rgb(0, 139, 56); color: rgb(255, 255, 255); font: 15pt \"Helvetica57-Condensed\";border-style: solid");
    form_link->addRow(line_link);
    // Usuario
    line_usuario = new QLineEdit;
    line_usuario->setFixedSize(600,30);
    line_usuario->setAlignment(Qt::AlignCenter);
    line_usuario->setStyleSheet("background-color: rgb(0, 139, 56); color: rgb(255, 255, 255); font: 15pt \"Helvetica57-Condensed\";border-style: solid");
    form_usuario->addRow(line_usuario);
    // Contraseña
    line_contrasenia = new QLineEdit;
    line_contrasenia->setFixedSize(600,30);
    line_contrasenia->setAlignment(Qt::AlignCenter);
    line_contrasenia->setStyleSheet("background-color: rgb(0, 139, 56); color: rgb(255, 255, 255); font: 15pt \"Helvetica57-Condensed\";border-style: solid");
    form_contrasenia->addRow(line_contrasenia);
    //
    group_seccion->setLayout(form_seccion);
    group_seccion->setFixedWidth(620);
    group_link->setLayout(form_link);
    group_link->setFixedWidth(620);
    group_usuario->setLayout(form_usuario);
    group_usuario->setFixedWidth(620);
    group_contrasenia->setLayout(form_contrasenia);
    group_contrasenia->setFixedWidth(620);

    grid_centro->addWidget(cAutoAdmin_view,0,0);
    grid_centro->addWidget(group_abm,1,0);
    grid_centro->addWidget(group_seccion,2,0);
    grid_centro->addWidget(group_link,3,0);
    grid_centro->addWidget(group_usuario,4,0);
    grid_centro->addWidget(group_contrasenia,5,0);
    widget_centro->setLayout(grid_centro);

    grid_derecho->addWidget(group_filtro,0,0);
    grid_derecho->addWidget(SITILabel,1,0);
    widget_derecho->setLayout(grid_derecho);

    grid_main->addWidget(clientsaa_view,0,0);
    grid_main->addWidget(widget_centro,0,1);
    grid_main->addWidget(widget_derecho,0,2);

    widget_main->setLayout(grid_main);
    setCentralWidget(widget_main);

    UpdateClientList();
    LimpiarListaAutoadmins();

    on_add_autoAdmin = false;
    on_edit_autoAdmin = false;
    row_edited = -1;

    // Doble click sobre un dominio abre la edición.
    connect(cAutoAdmin_view,SIGNAL(clicked(QModelIndex)),this,SLOT(AutoadminViewClicked(QModelIndex)));
    // Cuando se cambia la fecha de alta de un domino automaticamente se calcula fecha de vto y se setea.
//    connect(fecha_alta,SIGNAL(dateChanged(QDate)),this,SLOT(CalculateNICExpirationDate()));
    // Cuando se selecciona un cliente muestra los dominios asociados.
    connect(clientsaa_view,SIGNAL(clicked(QModelIndex)),this,SLOT(SeleccionarCliente()));
    // Definición de acceso directo para actualizr la lista mediante la combinacion de teclas "Ctrl + U".
    QShortcut* shortcutActualizar = new QShortcut(QKeySequence("Ctrl+U"), this);
    connect(shortcutActualizar, SIGNAL(activated()), this, SLOT(UpdateListsBtn()));

    // Definición de acceso directo para agregar un registro mediante la combinacion de teclas "Ctrl + A".
    shortcutAlta2 = new QShortcut(QKeySequence("Ctrl+A"), cAutoAdmin_view);
    connect(shortcutAlta2, SIGNAL(activated()), this, SLOT(AltaBtn()));
    // Definición de acceso directo para borrar un registro mediante la tecla "Supr".
    shortcutBaja2 = new QShortcut(QKeySequence(QKeySequence::Delete), this);
    connect(shortcutBaja2, SIGNAL(activated()), this, SLOT(BajaBtn()));
    // Definición de acceso directo para modificar un registro mediante la combinacion de teclas "Ctrl + M".
    shortcutModif2 = new QShortcut(QKeySequence("Ctrl+M"), this);
    connect(shortcutModif2, SIGNAL(activated()), this, SLOT(ModificarBtn()));
    // Definición de acceso directo para guardar un registro mediante la combinacion de teclas "Ctrl + G".
    shortcutModif2 = new QShortcut(QKeySequence("Ctrl+G"), this);
    connect(shortcutModif2, SIGNAL(activated()), this, SLOT(GuardarBtn()));

    DeshabilitarABM();
}

/**
 * @brief AutoAdminModule::UpdateListsToolBar
 */
void AutoAdminModule::UpdateListsToolBar()
{
    update_lists = new QAction("Actualizar Listado", this);
    update_lists->setIcon(QIcon("://Icons/BarraHerramientas/actualizar48.png"));
    update_lists->setToolTip("Actualiza ambas listas");
    connect(update_lists,SIGNAL(triggered()),this,SLOT(UpdateListsBtn()));

    autoAdmin_toolbar->addAction(update_lists);
}

/**
 * @brief AutoAdminModule::UpdateClientList
 */
void AutoAdminModule::UpdateClientList()
{
    enjoylifedb.transaction();
    QString filtro = "estado is null";
    clientsaa_model->setTable("cliente");
    clientsaa_model->setFilter(filtro);
    if (!(clientsaa_model->select())) {
        QMessageBox::critical(this,"Error!", "No se pudieron recuperar los registros, intentelo nuevamente más tarde.");
        enjoylifedb.rollback();
        return;
    }
    enjoylifedb.commit();
    CorrectViewOfClients();
    LimpiarListaAutoadmins();
    DeshabilitarABM();
}

/**
 * @brief AutoAdminModule::CorrectViewOfClients
 */
void AutoAdminModule::CorrectViewOfClients()
{
    clientsaa_model->setHeaderData(1,Qt::Horizontal,"Cliente");

    clientsaa_view->setModel(clientsaa_model);
    clientsaa_view->setCornerButtonEnabled(true);
    clientsaa_view->hideColumn(0);
    for (int var = 2; var < 24; ++var) {
        clientsaa_view->hideColumn(var);
    }

    clientsaa_view->setAlternatingRowColors(true);
    clientsaa_view->setGridStyle(Qt::SolidLine);
    clientsaa_view->setEditTriggers(QAbstractItemView::NoEditTriggers);
    clientsaa_view->setWordWrap(true);
    clientsaa_view->horizontalHeader()->setStretchLastSection(true);
    clientsaa_view->setSortingEnabled(false);
    clientsaa_view->sortByColumn(1,Qt::SortOrder());
}

/**
 * @brief AutoAdminModule::UpdateDomainsListBtn
 */
void AutoAdminModule::UpdateAutoadminsList()
{
    enjoylifedb.transaction();
    cAutoAdmin_model->setTable("autoadministrable");
    if (!(cAutoAdmin_model->select())) {
        QMessageBox::critical(this,"Error!", "No se pudieron recuperar los registros, intentelo nuevamente más tarde.");
        enjoylifedb.rollback();
        return;
    }
    enjoylifedb.commit();
    CorrectViewOfAutoadmins();
}

/**
 * @brief AutoAdminModule::CorrectViewOfAutoadmins
 */
void AutoAdminModule::CorrectViewOfAutoadmins()
{
    cAutoAdmin_model->setHeaderData(2,Qt::Horizontal,"Sección");
    cAutoAdmin_model->setHeaderData(3,Qt::Horizontal,"Link");
    cAutoAdmin_model->setHeaderData(4,Qt::Horizontal,"Usuario");
    cAutoAdmin_model->setHeaderData(5,Qt::Horizontal,"Contraseña");

    cAutoAdmin_view->setModel(cAutoAdmin_model);
    cAutoAdmin_view->setCornerButtonEnabled(true);
    cAutoAdmin_view->hideColumn(0);
    cAutoAdmin_view->hideColumn(1);

    cAutoAdmin_view->setAlternatingRowColors(true);
    cAutoAdmin_view->setGridStyle(Qt::SolidLine);
    cAutoAdmin_view->setEditTriggers(QAbstractItemView::NoEditTriggers);
    cAutoAdmin_view->setWordWrap(true);
    cAutoAdmin_view->setSortingEnabled(false);
    cAutoAdmin_view->sortByColumn(2,Qt::AscendingOrder);
    cAutoAdmin_view->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
}

/**
 * @brief AutoAdminModule::UpdateListsBtn
 */
void AutoAdminModule::UpdateListsBtn()
{
    UpdateClientList();
    LimpiarListaAutoadmins();
    DeshabilitarABM();
}

/**
 * @brief AutoAdminModule::LimpiarListaAutoadmins
 */
void AutoAdminModule::LimpiarListaAutoadmins()
{
    filtro_autoAdmin = "seccion = '  '";
    enjoylifedb.transaction();
    cAutoAdmin_model->setTable("autoadministrable");
    cAutoAdmin_model->setFilter(filtro_autoAdmin);
    if (!cAutoAdmin_model->select()) {
        QMessageBox::critical(this,"Error!", "No se pudieron recuperar las secciones, intentelo nuevamente más tarde.");
        enjoylifedb.rollback();
        CorrectViewOfAutoadmins();
        return;
    }
    enjoylifedb.commit();
    CorrectViewOfAutoadmins();
}

/**
 * @brief AutoAdminModule::SeleccionarCliente()
 */
void AutoAdminModule::SeleccionarCliente()
{
    int selection = -1;
    if (!(clientsaa_view->currentIndex().row() == -1)) {
        selection = clientsaa_view->currentIndex().row();
    }
    cliente = clientsaa_model->index(selection,1).data().toString();
    QString filtro = "a_razon_social = '" + cliente + "'" ;

    if (!(selection == -1)) {
        enjoylifedb.transaction();
        cAutoAdmin_model->setTable("autoadministrable");
        cAutoAdmin_model->setFilter(filtro);
        if (! cAutoAdmin_model->select()) {
            QMessageBox::critical(this,"Error!", "No hay secciones cargadas para este cliente.");
            enjoylifedb.rollback();
            CorrectViewOfAutoadmins();
            return;
        }
        enjoylifedb.commit();
        CorrectViewOfAutoadmins();
        DeshabilitarABM();
        altaBtn->setEnabled(true);

        // Definición de acceso directo para agregar un registro mediante la combinacion de teclas "Ctrl + A".
        connect(shortcutAlta2, SIGNAL(activated()), this, SLOT(AltaBtn()));
    }
}

/**
 * @brief AutoAdminModule::SeleccionarAutoadminClienteActual
 */
void AutoAdminModule::SeleccionarAutoadminClienteActual()
{
    QString filtro = "a_razon_social = '" + cliente + "'" ;
    enjoylifedb.transaction();
    cAutoAdmin_model->setTable("autoadministrable");
    cAutoAdmin_model->setFilter(filtro);
    if (! cAutoAdmin_model->select()) {
        QMessageBox::critical(this,"Error!", "No hay secciones cargadas para este cliente.");
        enjoylifedb.rollback();
        CorrectViewOfAutoadmins();
        return;
    }
    enjoylifedb.commit();
    CorrectViewOfAutoadmins();
    altaBtn->setEnabled(true);

}

// Filtros rápidos
/**
 * @brief AutoAdminModule::FindRazonSocial
 */
void AutoAdminModule::FindRazonSocial()
{
    if (find_razon_social->isChecked()) {
        find_seccion->setChecked(false);
        disconnect(find_line,SIGNAL(returnPressed()),this,SLOT(FilterAutoadmin()));
        find_line->setEnabled(true);
        connect(find_line,SIGNAL(returnPressed()),this,SLOT(FilterRazonSocial()));
    }
    else
        find_line->setEnabled(false);
}

/**
 * @brief AutoAdminModule::FilterRazonSocial
 */
void AutoAdminModule::FilterRazonSocial()
{
    if (!find_line->text().isEmpty()) {
        enjoylifedb.transaction();
        filtro_cliente = "razon_social ilike '%" + find_line->text() + "%'";
        clientsaa_model->setTable("cliente");
        clientsaa_model->filter().clear();
        clientsaa_model->setFilter(filtro_cliente);
        if (!(clientsaa_model->select())) {
            QMessageBox::critical(this,"Error!", "Ningún Registro cumple con esa condición.");
            enjoylifedb.rollback();
            UpdateClientList();
            return;
        }
        else {
            enjoylifedb.commit();
            LimpiarListaAutoadmins();
            DeshabilitarABM();
            CorrectViewOfClients();
        }
    }
    else
        UpdateClientList();
}

/**
 * @brief AutoAdminModule::FindAutoadmin
 */
void AutoAdminModule::FindAutoadmin()
{
    if (find_seccion->isChecked()) {
        find_razon_social->setChecked(false);
        disconnect(find_line,SIGNAL(returnPressed()),this,SLOT(FilterRazonSocial()));
        find_line->setEnabled(true);
        connect(find_line,SIGNAL(returnPressed()),this,SLOT(FilterAutoadmin()));
    }
    else
        find_line->setEnabled(false);
}

/**
 * @brief AutoAdminModule::FilterAutoadmin
 */
void AutoAdminModule::FilterAutoadmin()
{
    if (!find_line->text().isEmpty()) {
        enjoylifedb.transaction();
        filtro_autoAdmin = "seccion ilike '%" + find_line->text() + "%'";
        cAutoAdmin_model->setTable("autoadministrable");
        cAutoAdmin_model->filter().clear();
        cAutoAdmin_model->setFilter(filtro_autoAdmin);
        if (!(cAutoAdmin_model->select())) {
            QMessageBox::critical(this,"Error!", "Ningún Registro cumple con esa condición.");
            enjoylifedb.rollback();
            LimpiarListaAutoadmins();
            return;
        }
        else {
            enjoylifedb.commit();
            CorrectViewOfAutoadmins();
        }
    }
    else
        LimpiarListaAutoadmins();
}

// Funciones de los botones
/**
 * @brief AutoAdminModule::AltaBtn
 */
void AutoAdminModule::AltaBtn()
{
    if (!line_seccion->text().isEmpty()) {
        QMessageBox::StandardButton button;
        button = QMessageBox::question(this, tr("Alerta!"),
                                       "Actualmente está editando una sección "
                                       "quiere cancelar la operación e ingresar una nueva?",
                                       QMessageBox::Yes | QMessageBox::No);

        if (button == QMessageBox::Yes) {
            on_add_autoAdmin = true;
            on_edit_autoAdmin = false;
            bajaBtn->setEnabled(false);
            modificarBtn->setEnabled(false);
            guardarBtn->setEnabled(false);
            connect(line_seccion,SIGNAL(textChanged(QString)),this,SLOT(HabilitarGuardarBtn()));
            line_seccion->clear();
            line_seccion->setEnabled(true);
            line_seccion->setFocus();
            line_link->clear();
            line_link->setEnabled(true);
            line_usuario->clear();
            line_usuario->setEnabled(true);
            line_contrasenia->clear();
            line_contrasenia->setEnabled(true);
            return;
        }
    }
    else {
        on_add_autoAdmin = true;
        on_edit_autoAdmin = false;
        bajaBtn->setEnabled(false);
        modificarBtn->setEnabled(false);
        guardarBtn->setEnabled(false);
        connect(line_seccion,SIGNAL(textChanged(QString)),this,SLOT(HabilitarGuardarBtn()));
        line_seccion->clear();
        line_seccion->setEnabled(true);
        line_seccion->setFocus();
        line_link->clear();
        line_link->setEnabled(true);
        line_usuario->clear();
        line_usuario->setEnabled(true);
        line_contrasenia->clear();
        line_contrasenia->setEnabled(true);
    }
}

/**
 * @brief AutoAdminModule::BajaBtn
 */
void AutoAdminModule::BajaBtn()
{
    QMessageBox::StandardButton button;
    button = QMessageBox::question(this, tr("Eleminar Sección Auto Administrable"),
                                   "¿Está seguro que quiere "
                                   "eliminar la sección '" + line_seccion->text() + "'?",
                                   QMessageBox::Yes | QMessageBox::No);

    if (button == QMessageBox::Yes) {
        enjoylifedb.transaction();
        if (!cAutoAdmin_model->removeRow(cAutoAdmin_view->currentIndex().row())) {
            QMessageBox::critical(this,"Error!", "No se pudo eliminar la sección, vuelva a intentarlo.");
            enjoylifedb.rollback();
            return;
        }
        QMessageBox::information(this,"Exito!", "La sección fue eliminada correctamente.",
                                 QMessageBox::Ok);

        cAutoAdmin_model->submitAll();
        enjoylifedb.commit();
        SeleccionarAutoadminClienteActual();
        DeshabilitarABM();
    }
}

/**
 * @brief AutoAdminModule::ModificarBtn
 */
void AutoAdminModule::ModificarBtn()
{
    guardarBtn->setEnabled(true);
    line_seccion->setEnabled(true);
    line_seccion->setFocus();
    line_link->setEnabled(true);
    line_usuario->setEnabled(true);
    line_contrasenia->setEnabled(true);
    on_add_autoAdmin = false;
    on_edit_autoAdmin = true;
    row_edited = cAutoAdmin_view->currentIndex().row();
}

/**
 * @brief AutoAdminModule::GuardarBtn
 */
void AutoAdminModule::GuardarBtn()
{
    QMessageBox::StandardButton button;
    button = QMessageBox::question(this, tr("Guardar Sección"),
                                   "¿Está seguro que quiere "
                                   "guardar la sección " + line_seccion->text() + "?",
                                   QMessageBox::Yes | QMessageBox::No);

    if (button == QMessageBox::Yes) {
        // Se seleccionó la opción de agregar una nueva sección.
        if (on_add_autoAdmin) {
            if (line_seccion->text().isEmpty()) {
                QMessageBox::critical(this,"Insertar Sección",
                                      "Advertencia! Debe ingresar un valor para la sección");
                return;
            }
            if (line_link->text().isEmpty()) {
                QMessageBox::critical(this,"Insertar Sección",
                                      "Advertencia! Debe ingresar un valor para el link");
                return;
            }
            if (line_usuario->text().isEmpty()) {
                QMessageBox::critical(this,"Insertar Sección",
                                      "Advertencia! Debe ingresar un valor para el usuario");
                return;
            }
            if (line_contrasenia->text().isEmpty()) {
                QMessageBox::critical(this,"Insertar Sección",
                                      "Advertencia! Debe ingresar un valor para la contraseña");
                return;
            }

            // Se decide guardar la sección
            QSqlRecord record;

            // Se agrega la razon social
            QSqlField rsField(QStringLiteral("a_razon_social"), QVariant::String);
            rsField.setValue(cliente);
            record.append(rsField);

            // Se agrega la sección
            QSqlField sField(QStringLiteral("seccion"), QVariant::String);
            sField.setValue(line_seccion->text());
            record.append(sField);

            // Se agrega el link
            QSqlField lField(QStringLiteral("link"), QVariant::String);
            lField.setValue(line_link->text());
            record.append(lField);

            // Se agrega el usuario
            QSqlField uField(QStringLiteral("usuario"), QVariant::String);
            uField.setValue(line_usuario->text());
            record.append(uField);

            // Se agrega la contraseña
            QSqlField cField(QStringLiteral("contrasenia"), QVariant::String);
            cField.setValue(line_contrasenia->text());
            record.append(cField);

            enjoylifedb.transaction();
            if (!(cAutoAdmin_model->insertRecord(-1, record))) {
                QString error = cAutoAdmin_model->lastError().text();
                QMessageBox::critical(this,"Error!", tr("No se pudo insertar la sección, intentelo de nuevo."
                                                        "\n %1").arg(error));
                enjoylifedb.rollback();
                return;
            }
            enjoylifedb.commit();

            SeleccionarAutoadminClienteActual();
        }

        // El usuario hizo click sobre el boton editar.
        if (on_edit_autoAdmin) {
            QString filtro_autoadmin2 = "id_autoadmin = '" + idAutoAdmin + "'";
            cAutoAdmin_model->setFilter(filtro_autoadmin2);
            enjoylifedb.transaction();
            if (!(cAutoAdmin_model->select())) {
                QMessageBox::critical(this,"Error!", "No se pudieron recuperar los registros, intentelo manualmente.");
                enjoylifedb.rollback();
                return;
            }
            enjoylifedb.commit();
            if (cAutoAdmin_model->rowCount() == 1) {
                QSqlRecord record = cAutoAdmin_model->record(0);

                if (line_seccion->text().isEmpty()) {
                    QMessageBox::critical(this,"Insertar Sección",
                                          "Advertencia! Debe ingresar un valor para la sección");
                    return;
                }
                if (line_link->text().isEmpty()) {
                    QMessageBox::critical(this,"Insertar Sección",
                                          "Advertencia! Debe ingresar un valor para el link");
                    return;
                }
                if (line_usuario->text().isEmpty()) {
                    QMessageBox::critical(this,"Insertar Sección",
                                          "Advertencia! Debe ingresar un valor para el usuario");
                    return;
                }
                if (line_contrasenia->text().isEmpty()) {
                    QMessageBox::critical(this,"Insertar Sección",
                                          "Advertencia! Debe ingresar un valor para la contraseña");
                    return;
                }

                record.setValue("seccion", line_seccion->text());
                record.setValue("lin", line_link->text());
                record.setValue("usuario", line_usuario->text());
                record.setValue("contrasenia", line_contrasenia->text());

                cAutoAdmin_model->setRecord(0, record);
                enjoylifedb.transaction();
                if (!cAutoAdmin_model->submitAll()) {
                    QString error = cAutoAdmin_model->lastError().text();
                    QMessageBox::critical(this,"Error!", tr("No se pudo guardar los cambios realizados, intentelo de nuevo."
                                                            "\n %1").arg(error));
                    enjoylifedb.rollback();
                    return;
                }
                enjoylifedb.commit();
            }

            SeleccionarAutoadminClienteActual();
        }
        row_edited = -1;
        on_add_autoAdmin = false;
        on_edit_autoAdmin = false;
        altaBtn->setEnabled(true);
        bajaBtn->setEnabled(false);
        modificarBtn->setEnabled(false);
        guardarBtn->setEnabled(false);
        line_seccion->clear();
        line_seccion->setEnabled(false);
        line_link->clear();
        line_link->setEnabled(false);
        line_usuario->clear();
        line_usuario->setEnabled(false);
        line_contrasenia->clear();
        line_contrasenia->setEnabled(false);
    }
    else
        return;
}

/**
 * @brief AutoAdminModule::AutoadminViewClicked
 * @param index
 */
void AutoAdminModule::AutoadminViewClicked(const QModelIndex &index)
{
    if (index.row() != -1) {
        altaBtn->setEnabled(false);
        bajaBtn->setEnabled(true);
        modificarBtn->setEnabled(true);
        guardarBtn->setEnabled(false);
        idAutoAdmin= cAutoAdmin_model->index(index.row(),0).data().toString();
        line_seccion->setText(cAutoAdmin_model->index(index.row(),2).data().toString());
        line_link->setText(cAutoAdmin_model->index(index.row(),3).data().toString());
        line_usuario->setText(cAutoAdmin_model->index(index.row(),4).data().toString());
        line_contrasenia->setText(cAutoAdmin_model->index(index.row(),5).data().toString());
        line_seccion->setEnabled(false);
        line_link->setEnabled(false);
        line_usuario->setEnabled(false);
        line_contrasenia->setEnabled(false);

        // Definición de acceso directo para borrar un registro mediante la tecla "Supr".
        connect(shortcutBaja2, SIGNAL(activated()), this, SLOT(BajaBtn()));
    }
}

/**
 * @brief HabilitarABM
 */
void AutoAdminModule::HabilitarGuardarBtn()
{
    guardarBtn->setEnabled(true);
}

/**
 * @brief DeshabilitarABM
 */
void AutoAdminModule::DeshabilitarABM()
{
    row_edited = -1;
    on_add_autoAdmin = false;
    on_edit_autoAdmin = false;
    altaBtn->setEnabled(false);
    bajaBtn->setEnabled(false);
    modificarBtn->setEnabled(false);
    guardarBtn->setEnabled(false);
    line_seccion->setEnabled(false);
    line_seccion->clear();
    line_link->setEnabled(false);
    line_link->clear();
    line_usuario->setEnabled(false);
    line_usuario->clear();
    line_contrasenia->setEnabled(false);
    line_contrasenia->clear();

    // Definición de acceso directo para agregar un registro mediante la combinacion de teclas "Ctrl + A".
    disconnect(shortcutAlta2, SIGNAL(activated()), this, SLOT(AltaBtn()));
    // Definición de acceso directo para borrar un registro mediante la tecla "Supr".
    disconnect(shortcutBaja2, SIGNAL(activated()), this, SLOT(BajaBtn()));
    // Definición de acceso directo para modificar un registro mediante la combinacion de teclas "Ctrl + M".
    disconnect(shortcutModif2, SIGNAL(activated()), this, SLOT(ModificarBtn()));
}
